<!DOCTYPE html>
<!-- saved from url=(0127)https://docs.google.com/document/d/e/2PACX-1vSgRgRCjw2MUQYcmFVEHYktcXNLyL5XZTqIhfS3ERGIwFgtLr9lPHEK1wu7IfWi_S1DbDtGcIv8BaQW/pub -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>WebPerfWG triage call - October 17th 2019</title><link rel="shortcut icon" href="https://ssl.gstatic.com/docs/documents/images/kix-favicon7.ico"><meta name="referrer" content="strict-origin-when-cross-origin"><style type="text/css" nonce="">
      @import url("https://fonts.googleapis.com/css?family=Google+Sans");
      @import url("https://fonts.googleapis.com/css?family=Roboto");

      body {
        font-family: Roboto, arial, sans, sans-serif;
        margin: 0;
      }

      iframe {
        border: 0;
        frameborder: 0;
        height: 100%;
        width: 100%;
      }

      #header {
        align-items: center;
        background: white;
        border-bottom: 1px #ccc solid;
        display: flex;
        height: 60px;
        justify-content: space-between;
        position: fixed;
        top: 0;
        width: 100%;
        z-index: 100;
      }

      #header #title {
        font-family: 'Google Sans';
        font-size: large;
        margin: auto 0 auto 20px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        width: 70%;
      }

      #header #interval {
        margin: auto 25px auto 0;
        font-family: Roboto;
        font-size: small;;
      }

      #footer {
        background: #f0f0f0;
        border-bottom: 1px #ccc solid;
        bottom: 0;
        font-family: Roboto;
        font-size: small;
        padding: 10px 10px;
        position: fixed;
        text-align: center;
        width: 100%;
      }

      #contents {
        padding: 100px 20% 50px 20%;
      }

      @media only screen and (max-device-width: 800px) {
        #header {
          border-bottom-width: 5px;
          height: auto;
          display: block;
        }

        #header #title {
          font-size: 3em;
          margin: auto 0 auto 20px;
          width: 90%;
        }

        #header #interval {
          font-size: 1.5em;
          margin: 10px 0 auto 25px;
        }

        #contents {
          padding: 150px 5% 80px;
        }

        #footer {
          font-size: 2em;
        }
      }

      .dash {
        padding: 0 6px;
      }
    </style></head><body><div id="header"><div id="title">WebPerfWG triage call - October 17th 2019</div><div id="interval"><span></span></div></div><div id="contents"><style type="text/css">.lst-kix_me75hdwkihuv-2>li:before{content:"\0025a0  "}.lst-kix_me75hdwkihuv-1>li:before{content:"\0025cb  "}.lst-kix_me75hdwkihuv-0>li:before{content:"\0025cf  "}.lst-kix_me75hdwkihuv-8>li:before{content:"\0025a0  "}ul.lst-kix_me75hdwkihuv-4{list-style-type:none}ul.lst-kix_me75hdwkihuv-3{list-style-type:none}ul.lst-kix_me75hdwkihuv-6{list-style-type:none}.lst-kix_me75hdwkihuv-5>li:before{content:"\0025a0  "}ul.lst-kix_me75hdwkihuv-5{list-style-type:none}.lst-kix_me75hdwkihuv-7>li:before{content:"\0025cb  "}ul.lst-kix_me75hdwkihuv-8{list-style-type:none}ul.lst-kix_me75hdwkihuv-7{list-style-type:none}.lst-kix_me75hdwkihuv-6>li:before{content:"\0025cf  "}.lst-kix_me75hdwkihuv-3>li:before{content:"\0025cf  "}ul.lst-kix_me75hdwkihuv-0{list-style-type:none}ul.lst-kix_me75hdwkihuv-2{list-style-type:none}ul.lst-kix_me75hdwkihuv-1{list-style-type:none}.lst-kix_me75hdwkihuv-4>li:before{content:"\0025cb  "}ol{margin:0;padding:0}table td,table th{padding:0}.c0{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c5{padding-top:18pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c8{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:20pt;font-family:"Arial";font-style:normal}.c7{padding-top:20pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c10{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:16pt;font-family:"Arial";font-style:normal}.c2{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c4{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}.c11{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}.c6{color:inherit;text-decoration:inherit}.c1{font-weight:700}.c9{font-style:italic}.c3{height:11pt}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style><div class="c11"><h1 class="c7" id="h.30qggjbth4fe"><span class="c8">Participants</span></h1><p class="c2"><span class="c0">Yoav Weiss, Ryosuke Niwa, Steven Bougon, Nicolás Peña, Will Hawkins, Gilles Dubuc, Philip Walton, Eric Lawrence</span></p><p class="c2 c3"><span class="c0"></span></p><h1 class="c7" id="h.6200rls7looy"><span class="c8">Administrivia</span></h1><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Ilya couldn't make it due to an offsite.</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c0">Todd is leaving the chair position in the group. We have basically decided to continue on with two chairs until the rechartering in May next year. Actively looking for candidates up until that point. So we'll send out a call for candidates at some point in the near future.</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c0">Otherwise, regarding moving the calls an hour earlier- some survivorship bias in asking the group on the call, but didn't hear any objections, so 10am PST moving forward. If there are problems in the future we can try to figure out a different time that works well for most people.</span></p><p class="c2 c3"><span class="c0"></span></p><h1 class="c7" id="h.a19z3gcaddm7"><span>Navigation Timing</span></h1><p class="c2 c3"><span class="c0"></span></p><h2 class="c5" id="h.r3opzrl9og1"><span class="c4"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/navigation-timing/issues/115&amp;sa=D&amp;source=editors&amp;ust=1613235227853000&amp;usg=AOvVaw0yT82hPCFQevC7PRu9HBuC">Navigation type and BF cache</a></span></h2><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: What should it do was discussed at TPAC. Got feedback from Boris regarding the current definition and how we should improve it. Underlying question at TPAC: what do we want back-forward cache navigations to look like and what we want history navigations to look like.</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c0">Use case from Nic Jansma telling history navigations from regular navigations, but that doesn't tell us what we need to do for BFCache where document is being revived from BFCache and it has the previous entries in place.</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: What does the spec currently say?</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: currently the spec refers to “traverse the history” which is true for every navigation. Wasn’t around when it was defined, but think it was intended for history-related pages and their loading times but also because NavigationType is back/forward but not necessarily BFcache related. Reasonable to expect it to have different characteristics vs. Navigate or a Reload operation. Also makes sense to distinguish BFCache from regular history traversal. </span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: For the Back/Forward case which would be the timestamps that we would use? Some of them would not make sense when there’s no navigation? </span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Maybe the shortest path forward would be to define a BFNav type as a part of L2? Or should we redefine the current “Traverse history by delta” as Boris suggested? Or define BackForward as a simple history navigation and tackle BFCache at a later point? </span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Philip</span><span><b></b>: More context: Google properties want to measure how long it takes from the user clicking back for the page to show? Not currently exposed </span><span>except in Safari</span><span>&nbsp;which updates NavTiming L1 data. Useful for Google to get the info but no other browser exposes it. Can we expose how long it takes to come out of the BFCache and compare to a regular history navigation? This use case is not met by the current API. Can we either update it or add a new entry type?<br><br></span><span class="c1">Will</span><span class="c0"><b></b>: Seems to argue for adding a new NavigationType for BFCache that could pull that time out?</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: This would be different than BackForward as it exists today?</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Philip</span><span class="c0"><b></b>: New entry dispatched by PerformanceObserver?</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Yes, I think that would be the cleanest solution. But as Nicolás pointed out there are various currently exposed attributes on that entry that don’t make sense. So we need to think about what each would mean in the BFCache case. But tangent issue that there are compatibility differences due to under-definition (Safari/Firefox).</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c0">For L1 it would make sense to align everyone to that. </span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Philip</span><span class="c0"><b></b>: Strong feelings about changing anything on the page in a getter on a global. Store a local reference and don’t expect it to change because it would be surprising if the value changed. </span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: You’re saying “The L1 entry values should not change?”</span></p><p class="c2"><span class="c1">Philip</span><span class="c0"><b></b>: Yes.</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Yeah, modifying entries seems surprising and leaving other entries untouched seems weird.</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c0">Need to make progress on this issue and better define what the current BackForward type means. Maybe Philip or Nicolás could open a new issue indicating that we want to tackle the BackForwardCache case specifically. &nbsp;Only piece we need to agree on for L2 is about whether we want to change the already-dispatched entries. I tend to agree that we shouldn’t.</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c0">Perspective on current Safari behavior?</span></p><p class="c2"><span class="c1">Ryosuke</span><span class="c0"><b></b>: Don’t know if intentional or a bug. Nothing useful to say here.</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Could you investigate whether it’s intentional for the group?</span></p><p class="c2"><span class="c1">Ryosuke</span><span class="c0"><b></b>: Could you elaborate on the behavior?</span></p><p class="c2"><span class="c1">Philip</span><span class="c0"><b></b>: Performance.timing.NavigationStart and some entries in the L1 specification (not PerformanceEntry) values get updated when page comes out of BFCache. And items that don’t apply are set to 0. In the pageShow event the eventTimestamp property isn’t set to the same as NavigationStart. Need to decide how browsers should set value.</span></p><p class="c2"><span><b>Ryosuke</b>: Load Page A. Nav to B. Back Nav to A. In Safari, Values updated when go back to A but not other browsers? </span><span class="c1">Action Item</span><span class="c1">&nbsp;</span><span class="c0">Yeah, I can take a look. &nbsp;Please comment on Github issue directly and point to the change that allows us to do some archaeology. </span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Philip</span><span><b></b>: </span><span class="c1">Action Item</span><span class="c1"><b></b>: </span><span>Open issue for new BFCache Type </span><span class="c9">and </span><span class="c0">new Entry. Need to define what the values for that entry would be. </span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Yoav</span><span><b></b>: For issue 115: we need to do some work to define what non-BFCache case does here.</span><span class="c0">&nbsp;Clarifying that this issue isn’t BFCache related was helpful.</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Ryosuke</span><span class="c0"><b></b>: Looks like Safari behavior might be due to change in 2010 before the Blink fork happened. Something interesting happened there. </span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Chromium doesn’t yet have a BFCache; work is in progress now to ship one. </span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2 c3"><span class="c0"></span></p><hr><p class="c2 c3"><span class="c0"></span></p><h2 class="c5" id="h.hgpj6yso2ru5"><span class="c4"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/navigation-timing/issues/114&amp;sa=D&amp;source=editors&amp;ust=1613235227857000&amp;usg=AOvVaw3jdSuViS2ernkHobfmcEeg">Processing model for nav timing doesn't match reality</a></span></h2><p class="c2"><span class="c1">Yoav</span><span><b></b>: </span><span class="c0">Not something we need to discuss. Add some hooks to HTML to enable storing state in relevant documents and read it from a getter. This is just work and work that is L2 blocking.</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2 c3"><span class="c0"></span></p><hr><p class="c2 c3"><span class="c0"></span></p><p class="c2 c3"><span class="c0"></span></p><h2 class="c5" id="h.h0g3zo7715w"><span class="c4"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/navigation-timing/issues/116&amp;sa=D&amp;source=editors&amp;ust=1613235227858000&amp;usg=AOvVaw3DW9c06f39HLzIt5dfnhPV">Definition of reload</a></span></h2><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Nicolás</span><span><b></b>: Spec definition of NavigationType Reload is unclear. Example where a user loads website then click in the address bar and hit Enter. </span><span class="c1">For Chrome, it is treated as a reload </span><span class="c0">(EricLaw: for NavigationType, not everything, see below). </span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c0">So navigation type is set to reload. Some people filed a bug that this shouldn’t be treated as a reload as it wasn’t treated as a reload operation explicitly. Want clarification about correct behavior here. </span></p><p class="c2"><span>(EricLaw: Firefox 69 does NOT treat Enter in the address bar as a NavigationType=reload (</span><span class="c4"><a class="c6" href="https://www.google.com/url?q=https://webdbg.com/test/cookie/samesite/&amp;sa=D&amp;source=editors&amp;ust=1613235227858000&amp;usg=AOvVaw08iw0x-2VEFKhJPNQkB7J0">test page</a></span><span class="c0">))</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: The spec doesn’t define or link to a definition of “reload operation”. We need to have a better definition of what a reload operation is. </span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c0">Implication for other features of “treated as reload”? Cache-Control headers? SameSite cookies?</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: Think it’s treated the same as the reload button</span></p><p class="c2"><span class="c1">Eric</span><span class="c0"><b></b>: SameSite cookies may be impacted </span></p><p class="c2"><span class="c1">Yoav</span><span><b></b>: HTML might have a definition for “</span><span class="c4"><a class="c6" href="https://www.google.com/url?q=https://html.spec.whatwg.org/%23the-location-interface:reload-triggered-navigation-2&amp;sa=D&amp;source=editors&amp;ust=1613235227859000&amp;usg=AOvVaw3z6LfvbtSRggMebiU_itvL">reload-triggered-navigation</a></span><span class="c0">” we can use? Defined for the explicit .reload() method. “When a user requests that the active document be reloaded through a user-interface element, then …” But no definition of what the UI element is. </span></p><p class="c2"><span class="c0">Whether user hits enter on the address bar or clicks reload button or hotkey, doesn’t seem web exposed or something that can impact web compat. Different browsers can do different things.</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: The navigation type “navigate” definition seem a bit contradictory in that entering a URL in the address bar counts as “navigate”.</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: sure but in the case your talking about the user didn’t enter the URL</span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: what about copy paste?</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Sounds like a UI decision that shouldn’t necessarily be in the spec? Spec should probably link to the concept of a “Reload triggered navigation” and define reload through that? But that won’t solve your issue. </span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: It might if I can somehow figure out what entering on the address bar is. Suspect it’s a reload triggered navigation</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: “UI element” sounds like something that’s explicitly vague</span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: we would need to redefine the “navigate” type as well.</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Can we define it as Navigation operation that wasn’t a reload triggered nor history traversal? None of the others. About prerender, we need to kill it; not implemented anywhere. Which is another issue.</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Will</span><span class="c0"><b></b>: Definition of a reload triggered navigation is in the otherwise section of what the reload method does on Location interface?</span></p><p class="c2"><span class="c1">Yoav</span><span><b></b>: </span><span class="c4"><a class="c6" href="https://www.google.com/url?q=https://html.spec.whatwg.org/%23the-location-interface:reload-triggered-navigation-2&amp;sa=D&amp;source=editors&amp;ust=1613235227860000&amp;usg=AOvVaw2R77S06CzDVKGQUHu3aJX2">Paragraph below that</a></span><span class="c0">. </span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">EricLaw</span><span><b></b>: In Chrome. Hitting enter in the address bar is different than hitting Refresh for both sending of SameSiteStrict cookies and behavior for when you got to the page via a POST navigation. (</span><span class="c4"><a class="c6" href="https://www.google.com/url?q=https://webdbg.com/test/cookie/samesite/&amp;sa=D&amp;source=editors&amp;ust=1613235227861000&amp;usg=AOvVaw2BGIBl9o21wZWtUhVT-H_e">Tests</a></span><span class="c0">, see the footer for a NavigationTiming entry log)</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Do you know if those concepts are defined in spec?</span></p><p class="c2"><span class="c1">Eric</span><span class="c0"><b></b>: Not sure.</span></p><p class="c2"><span class="c1">Ryosuke</span><span class="c0"><b></b>: difference between reload from script and reload through UI?</span></p><p class="c2"><span class="c1">Eric</span><span class="c0"><b></b>: UI, but this conversation started from the fact that different UI elements can trigger reload. That’s true for navigation type, but not necessarily true for at least two other aspects of “reload” vs. “navigate”</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: so maybe we need multiple types of “reload triggered navigations” that define all those different behaviors</span></p><p class="c2"><span class="c1">Ryosuke</span><span class="c0"><b></b>: Are those differences in Chrome intentional?</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: It seems like a UI decision, but not 100% sure</span></p><p class="c2"><span class="c1">Ryosuke</span><span class="c0"><b></b>: In the case of POST changing to GET, that’s not a reload operation but a different navigation. We don’t really define what kind of navigation was used.</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Good questions, but we don’t really have answers.</span></p><p class="c2"><span class="c1">Ryosuke</span><span class="c0"><b></b>: Maybe we need a broader issue about what reload means. </span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Do we need to address UI behavior in NavigationTiming? Can we just map to HTML reload-triggered-navigation concept? </span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: But we don’t really know what it means.</span></p><p class="c2"><span class="c1">Yoav</span><span><b></b>: Currently it doesn’t really define behavior. We probably need a </span><span class="c9">broader </span><span class="c0"><b>issue about the different behaviors that are triggered by different UI elements</b>: POST vs. GET, SameSite cookies, etc. Need to figure out &nbsp;if those are mapped to a well-defined standard concept. </span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: Which spec?</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: HTML defines “reload-triggered navigation” so probably there. The flag sets a Fetch flag, but maybe we need multiple flags that perform those different behaviors.</span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: Possible that some of these are attempts in optimization and are not meant to be defined</span></p><p class="c2"><span class="c1">Yoav</span><span><b></b>: Fetch doesn’t seem to be doing anything with this flag other than returning it in IsReloadNavigation. But seems like an </span><span>HTML issue</span><span class="c0">, not a navigation timing issue. Also need to see if other browsers are doing similar things. Worthwhile to write all these questions down in an issue.</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Ryosuke</span><span class="c0"><b></b>: When a page fetched with POST then loads as using GET, that’s not a reload, but another navigation. If you were in a GET page and then changed methods to a POST page, that’s clearly not a reload, right?</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: I agree. We can verify what Chrome and other browsers consider this, and see how it maps to HTML’s “reload-triggered navigation” concept. Worthwhile to test and figure out the rationale behind those UI decisions.</span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: Action items?</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Map “reload” and “navigate” types to the “reload-triggered navigation” concept, but that doesn’t necessarily answer your question. </span></p><p class="c2"><span class="c0">From a loading perspective, the differences between reload and navigate: E.g. Cache-Control headers with different loading characteristics. Probably want to report that regardless of how in the UI it was invoked. </span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c0">Different UI elements do different reload-like things, maybe we want to define that, but seems out of scope for Navigation Timing.</span></p><hr><p class="c2 c3"><span class="c0"></span></p><p class="c2 c3"><span class="c0"></span></p><h2 class="c5" id="h.jzwcnoas09p9"><span class="c4"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/navigation-timing/issues/117&amp;sa=D&amp;source=editors&amp;ust=1613235227863000&amp;usg=AOvVaw0fJnjQFMXKN2NF4z8GBkzF">Rethink former-TAO limitations</a></span></h2><p class="c2"><span class="c1">Yoav</span><span><b></b>: </span><span class="c0">We modified the previous timingAllowed checks to be same-origin checks. There are various attributes on the entry that only get a value if same-origin to previous navigation. But right now that definition requires some cleanup.</span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: What’s the correct fix? Do we want TimingAllowOrigin / SameOrigin checks?</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: The TAO definition made it so that if you are browsing to a page, that page has control over whether it has access to various characteristics of the previous navigation. Didn’t make sense for the current page to be able to opt-in to get information on the previous page. Removed that in favor of a SameOrigin check. From what I see on the issue, there are a bunch of attributes that are still protected and shouldn’t be?</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: It’s confusing because in the NavigationTiming processing model they are not protected, but they link to the ResourceTiming spec for their definitions which do have the checks on their getters there. If I’m an implementer, what do I do? Should I do the checks?</span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Spec bug. </span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: Attribute getters should be trivial. In ResourceTiming, move the checks outside the attribute getters and run that only on the ResourceTiming processing model but not the NavigationTiming processing model. </span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: Or don’t link to RT spec from NT spec, and instead redefine these in NT spec without the checks? But that’s uglier, so we shouldn’t</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span>Don’t want to redefine. </span><span class="c1">Action Item (yoav): </span><span>File an issue on RT proposing a flag where the TAO-check is bypassed, and set that bypass flag when calling from NavigationTiming.</span><span class="c0">&nbsp;</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: SecureConnectionStart is also linking directly to RT which seems incorrect for the same reason. </span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: yeah, we consolidated the definitions, but looks like we consolidated too much.</span></p><p class="c2 c3"><span class="c0"></span></p><hr><p class="c2 c3"><span class="c0"></span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Yoav</span><span class="c0"><b></b>: A few requestidlecallback issues: Excited to see Ryosuke making progress there. Out of time to discuss.</span></p><p class="c2"><span class="c1">Nicolás</span><span class="c0"><b></b>: Invite Ross Mcilroy to the next call to get answers. Take this up on the next call.</span></p><p class="c2"><span class="c0">If blocked, could set up an earlier call?</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Ryosuke</span><span class="c0"><b></b>: Not necessarily blocked. Could just implement best guess. But would be good to talk before next scheduled call.</span></p><p class="c2 c3"><span class="c0"></span></p><hr><p class="c2 c3"><span class="c0"></span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2"><span class="c1">Yoav</span><span><b></b>: Thanks! Next call on Oct 31st, 10AM PST. Halloween? Might not work well for folks. </span><span>Will send an email to reschedule.</span></p><p class="c2 c3"><span class="c0"></span></p><p class="c2 c3"><span class="c0"></span></p></div></div><div id="footer"><span>Published by <a target="_blank" title="Learn more about Google Drive" href="https://docs.google.com/">Google Drive</a></span><span class="dash">–</span><a href="https://docs.google.com/u/0/abuse?id=AKkXjozcg4-sikGfX7TtRMDSe2xp72lZVHbQHupjOLoNRCQUAZ_4EzSFm2AE81BYWF5Hci0H7uWzcI5cc23PsO8:0">Report Abuse</a></div><script type="text/javascript" nonce="">(function(){/*

 Copyright The Closure Library Authors.
 SPDX-License-Identifier: Apache-2.0
*/
var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};function ba(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var ca=ba(this);
function da(a,b){if(b)a:{var c=ca;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&aa(c,a,{configurable:!0,writable:!0,value:b})}}var ea="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},fa;
if("function"==typeof Object.setPrototypeOf)fa=Object.setPrototypeOf;else{var ha;a:{var ia={a:!0},ja={};try{ja.__proto__=ia;ha=ja.a;break a}catch(a){}ha=!1}fa=ha?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ka=fa;
function h(a,b){a.prototype=ea(b.prototype);a.prototype.constructor=a;if(ka)ka(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.o=b.prototype}da("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});var l=this||self;function la(){}function ma(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}
function na(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}}function oa(a,b){function c(){}c.prototype=b.prototype;a.o=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.B=function(d,e,f){for(var g=Array(arguments.length-2),k=2;k<arguments.length;k++)g[k-2]=arguments[k];return b.prototype[e].apply(d,g)}}function pa(a){return a};var qa=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if("string"===typeof a)return"string"!==typeof b||1!=b.length?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};function ra(a,b,c){for(var d in a)b.call(c,a[d],d,a)};var m;function p(a,b){this.i=a===sa&&b||"";this.j=ta}p.prototype.h=!0;p.prototype.g=function(){return this.i};var ta={},sa={};var ua=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]},va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,Ba=/[\x00&<>"']/;function Ca(a,b){return a<b?-1:a>b?1:0};function q(a,b){this.i=b===r?a:""}q.prototype.h=!0;q.prototype.g=function(){return this.i.toString()};q.prototype.toString=function(){return this.i.toString()};function u(a){return a instanceof q&&a.constructor===q?a.i:"type_error:SafeUrl"}
var Da=/^(?:audio\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-matroska|x-wav|wav|webm)|font\/\w+|image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|video\/(?:mpeg|mp4|ogg|webm|quicktime|x-matroska))(?:;\w+=(?:\w+|"[\w;,= ]+"))*$/i,Ea=/^data:(.*);base64,[a-z0-9+\/]+=*$/i,Fa=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;function Ga(a){if(a instanceof q)return a;a="object"==typeof a&&a.h?a.g():String(a);Fa.test(a)||(a="about:invalid#zClosurez");return new q(a,r)}
var r={},Ha=new q("about:invalid#zClosurez",r);var v;a:{var Ia=l.navigator;if(Ia){var Ja=Ia.userAgent;if(Ja){v=Ja;break a}}v=""}function w(a){return-1!=v.indexOf(a)};function x(a,b,c){this.i=c===Ka?a:""}x.prototype.h=!0;x.prototype.g=function(){return this.i.toString()};x.prototype.toString=function(){return this.i.toString()};var Ka={};function La(a,b,c,d){a=a instanceof q?a:Ga(a);b=b||l;c=c instanceof p?c instanceof p&&c.constructor===p&&c.j===ta?c.i:"type_error:Const":c||"";return void 0!==d?b.open(u(a),c,d,void 0):b.open(u(a),c)};function Ma(a){Ma[" "](a);return a}Ma[" "]=la;function y(a,b,c){return Object.prototype.hasOwnProperty.call(a,b)?a[b]:a[b]=c(b)};var Na=w("Opera"),z=w("Trident")||w("MSIE"),Oa=w("Edge"),Pa=Oa||z,Qa=w("Gecko")&&!(-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"))&&!(w("Trident")||w("MSIE"))&&!w("Edge"),Ra=-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"),Sa=w("Macintosh");function Ta(){var a=l.document;return a?a.documentMode:void 0}var Ua;
a:{var Va="",Wa=function(){var a=v;if(Qa)return/rv:([^\);]+)(\)|;)/.exec(a);if(Oa)return/Edge\/([\d\.]+)/.exec(a);if(z)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Ra)return/WebKit\/(\S+)/.exec(a);if(Na)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Wa&&(Va=Wa?Wa[1]:"");if(z){var Xa=Ta();if(null!=Xa&&Xa>parseFloat(Va)){Ua=String(Xa);break a}}Ua=Va}var Ya=Ua,Za={},$a;if(l.document&&z){var ab=Ta();$a=ab?ab:parseInt(Ya,10)||void 0}else $a=void 0;var bb=$a;function cb(a){return y(a.prototype,"$$generatedClassName",function(){return"Class$obf_"+{valueOf:function(){return++db}}})}var db=1E3;function A(){}A.prototype.u=function(){return this.j||(Object.defineProperties(this,{j:{value:++eb,enumerable:!1}}),this.j)};A.prototype.toString=function(){var a=B(fb(gb(this.constructor)))+"@";var b=(this.u()>>>0).toString(16);return a+B(b)};function D(){}h(D,A);D.prototype.i=function(a){this.h=a;if(a instanceof Object)try{a.A=this}catch(b){}};function hb(a){a.h instanceof Error&&(Error.captureStackTrace?Error.captureStackTrace(a.h):a.h.stack=Error().stack)}D.prototype.toString=function(){var a=fb(gb(this.constructor)),b=this.l;return null==b?a:B(a)+": "+B(b)};function ib(){}h(ib,D);function jb(){}h(jb,ib);var eb=0;function E(){}h(E,jb);E.prototype.i=function(a){jb.prototype.i.call(this,Object.is(this.g,"__noinit__")?a:this.g)};function kb(){}h(kb,E);function lb(a,b){return"string"==typeof a?a.charCodeAt(b):a.g(b)};function B(a){return null==a?"null":a.toString()}function mb(a){return 65536<=a?B(String.fromCharCode((55296+((a-65536|0)>>10&1023)|0)&65535))+B(String.fromCharCode((56320+((a-65536|0)&1023)|0)&65535)):String.fromCharCode(a&65535)}function nb(a,b){var c=b,d=a.length,e;b=lb(a,(e=c,c=c+1|0,e));var f;if(e=55296<=b&&56319>=b&&c<d)a=f=lb(a,c),e=56320<=a&&57343>=a;var g;e?g=65536+((b&1023)<<10)+(f&1023)|0:g=b;return g};function ob(a,b){this.h=a;this.g=b}h(ob,A);function fb(a){var b=cb(a.h);0!=a.g&&(b="L"+B(b)+";");a=a.g;for(var c="",d=0;d<a;d=d+1|0)c=B(c)+"[";return B(c)+B(b)}ob.prototype.toString=function(){return"class "+B(fb(this))};function gb(a){var b=0;return y(a.prototype,"$$class/"+b,function(){return new ob(a,b)})};function pb(a,b){return null==a?a:b?decodeURI(a):decodeURIComponent(a)};var qb=/^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#([\S\s]*))?$/;function rb(a){a=qb.exec(a);for(var b=[],c=0;7>=c;c=c+1|0)a.length<=c||null==a[c]?b.push(null):b.push(a[c]);return b}
function sb(a,b){var c=a.indexOf(mb(35));c=0>c?a.length:c;a:{var d=0;for(var e=b.length;0<(d=a.indexOf(b,d))&&d<c;){var f=nb(a,d-1|0);if(38==f||63==f){if((d+e|0)>=a.length)break a;f=nb(a,d+e|0);if(61==f||38==f||35==f)break a}d=d+(e+1)|0}d=-1}if(0>d)return null;e=a.indexOf(mb(38),d);if(0>e||e>c)e=c;d=d+(b.length+1)|0;b=Math.min(a.length,d);a=a.substr(b,Math.min(a.length,Math.max(d,e))-b|0);c=" ";for(b=0;0<=(b=c.indexOf("\\",b));)36==c.charCodeAt(b+1|0)?(d=B(c.substr(0,b|0))+"$",e=b=b+1|0,c=d+B(c.substr(e))):
(d=B(c.substr(0,b|0)),e=b=b+1|0,c=d+B(c.substr(e)));a=a.replace(/\+/g,c);return pb(a,!1)};function F(a,b){this.h=b;for(var c=[],d=!0,e=a.length-1;0<=e;e--){var f=a[e]|0;d&&f==b||(c[e]=f,d=!1)}this.g=c}var tb={};function ub(a){return-128<=a&&128>a?y(tb,a,function(b){return new F([b|0],0>b?-1:0)}):new F([a|0],0>a?-1:0)}function G(a){if(isNaN(a)||!isFinite(a))return H;if(0>a)return I(G(-a));for(var b=[],c=1,d=0;a>=c;d++)b[d]=a/c|0,c*=4294967296;return new F(b,0)}var H=ub(0),J=ub(1),vb=ub(16777216);
function K(a){if(-1==a.h)return-K(I(a));for(var b=0,c=1,d=0;d<a.g.length;d++){var e=L(a,d);b+=(0<=e?e:4294967296+e)*c;c*=4294967296}return b}F.prototype.toString=function(a){a=a||10;if(2>a||36<a)throw Error("radix out of range: "+a);if(M(this))return"0";if(-1==this.h)return"-"+I(this).toString(a);for(var b=G(Math.pow(a,6)),c=this,d="";;){var e=wb(c,b).g;c=N(c,O(e,b));var f=((0<c.g.length?c.g[0]:c.h)>>>0).toString(a);c=e;if(M(c))return f+d;for(;6>f.length;)f="0"+f;d=f+d}};
function L(a,b){return 0>b?0:b<a.g.length?a.g[b]:a.h}function M(a){if(0!=a.h)return!1;for(var b=0;b<a.g.length;b++)if(0!=a.g[b])return!1;return!0}function P(a,b){a=N(a,b);return-1==a.h?-1:M(a)?0:1}function I(a){for(var b=a.g.length,c=[],d=0;d<b;d++)c[d]=~a.g[d];return(new F(c,~a.h)).add(J)}F.prototype.abs=function(){return-1==this.h?I(this):this};
F.prototype.add=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0,e=0;e<=b;e++){var f=d+(L(this,e)&65535)+(L(a,e)&65535),g=(f>>>16)+(L(this,e)>>>16)+(L(a,e)>>>16);d=g>>>16;f&=65535;g&=65535;c[e]=g<<16|f}return new F(c,c[c.length-1]&-2147483648?-1:0)};function N(a,b){return a.add(I(b))}
function O(a,b){if(M(a)||M(b))return H;if(-1==a.h)return-1==b.h?O(I(a),I(b)):I(O(I(a),b));if(-1==b.h)return I(O(a,I(b)));if(0>P(a,vb)&&0>P(b,vb))return G(K(a)*K(b));for(var c=a.g.length+b.g.length,d=[],e=0;e<2*c;e++)d[e]=0;for(e=0;e<a.g.length;e++)for(var f=0;f<b.g.length;f++){var g=L(a,e)>>>16,k=L(a,e)&65535,t=L(b,f)>>>16,n=L(b,f)&65535;d[2*e+2*f]+=k*n;Q(d,2*e+2*f);d[2*e+2*f+1]+=g*n;Q(d,2*e+2*f+1);d[2*e+2*f+1]+=k*t;Q(d,2*e+2*f+1);d[2*e+2*f+2]+=g*t;Q(d,2*e+2*f+2)}for(e=0;e<c;e++)d[e]=d[2*e+1]<<16|
d[2*e];for(e=c;e<2*c;e++)d[e]=0;return new F(d,0)}function Q(a,b){for(;(a[b]&65535)!=a[b];)a[b+1]+=a[b]>>>16,a[b]&=65535,b++}function S(a,b){this.g=a;this.h=b}
function wb(a,b){if(M(b))throw Error("division by zero");if(M(a))return new S(H,H);if(-1==a.h)return b=wb(I(a),b),new S(I(b.g),I(b.h));if(-1==b.h)return b=wb(a,I(b)),new S(I(b.g),b.h);if(30<a.g.length){if(-1==a.h||-1==b.h)throw Error("slowDivide_ only works with positive integers.");for(var c=J,d=b;0>=P(d,a);)c=xb(c,1),d=xb(d,1);var e=T(c,1),f=T(d,1);d=T(d,2);for(c=T(c,2);!M(d);){var g=f.add(d);0>=P(g,a)&&(e=e.add(c),f=g);d=T(d,1);c=T(c,1)}b=N(a,O(e,b));return new S(e,b)}for(e=H;0<=P(a,b);){c=Math.max(1,
Math.floor(K(a)/K(b)));d=Math.ceil(Math.log(c)/Math.LN2);d=48>=d?1:Math.pow(2,d-48);f=G(c);for(g=O(f,b);-1==g.h||0<P(g,a);)c-=d,f=G(c),g=O(f,b);M(f)&&(f=J);e=e.add(f);a=N(a,g)}return new S(e,a)}F.prototype.and=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)&L(a,d);return new F(c,this.h&a.h)};F.prototype.or=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)|L(a,d);return new F(c,this.h|a.h)};
F.prototype.xor=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)^L(a,d);return new F(c,this.h^a.h)};function xb(a,b){var c=b>>5;b%=32;for(var d=a.g.length+c+(0<b?1:0),e=[],f=0;f<d;f++)e[f]=0<b?L(a,f-c)<<b|L(a,f-c-1)>>>32-b:L(a,f-c);return new F(e,a.h)}function T(a,b){var c=b>>5;b%=32;for(var d=a.g.length-c,e=[],f=0;f<d;f++)e[f]=0<b?L(a,f+c)>>>b|L(a,f+c+1)<<32-b:L(a,f+c);return new F(e,a.h)};N(xb(J,32),J);N(xb(J,128),J);function yb(a){a&&"function"==typeof a.v&&a.v()};function U(){this.h=this.h;this.g=this.g}U.prototype.h=!1;U.prototype.v=function(){this.h||(this.h=!0,this.j())};U.prototype.j=function(){if(this.g)for(;this.g.length;)this.g.shift()()};var zb=!z||9<=Number(bb),Ab=!z||9<=Number(bb),Bb=z&&!y(Za,"9",function(){for(var a=0,b=ua(String(Ya)).split("."),c=ua("9").split("."),d=Math.max(b.length,c.length),e=0;0==a&&e<d;e++){var f=b[e]||"",g=c[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];if(0==f[0].length&&0==g[0].length)break;a=Ca(0==f[1].length?0:parseInt(f[1],10),0==g[1].length?0:parseInt(g[1],10))||Ca(0==f[2].length,0==g[2].length)||Ca(f[2],g[2]);f=f[3];g=g[3]}while(0==a)}return 0<=a}),
Cb=function(){if(!l.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}});try{l.addEventListener("test",la,b),l.removeEventListener("test",la,b)}catch(c){}return a}();function Db(a,b){this.type=a;this.g=this.target=b;this.defaultPrevented=!1}Db.prototype.h=function(){this.defaultPrevented=!0};function V(a,b){Db.call(this,a?a.type:"");this.relatedTarget=this.g=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key="";this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType="";this.i=null;if(a){var c=this.type=a.type,d=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.g=b;if(b=a.relatedTarget){if(Qa){a:{try{Ma(b.nodeName);var e=!0;break a}catch(f){}e=
!1}e||(b=null)}}else"mouseover"==c?b=a.fromElement:"mouseout"==c&&(b=a.toElement);this.relatedTarget=b;d?(this.clientX=void 0!==d.clientX?d.clientX:d.pageX,this.clientY=void 0!==d.clientY?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||0):(this.clientX=void 0!==a.clientX?a.clientX:a.pageX,this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.key=a.key||"";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=
a.shiftKey;this.metaKey=a.metaKey;this.pointerId=a.pointerId||0;this.pointerType="string"===typeof a.pointerType?a.pointerType:Eb[a.pointerType]||"";this.state=a.state;this.i=a;a.defaultPrevented&&V.o.h.call(this)}}oa(V,Db);var Fb=[1,4,2],Eb={2:"touch",3:"pen",4:"mouse"};V.prototype.h=function(){V.o.h.call(this);var a=this.i;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,Bb)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};var Gb="closure_listenable_"+(1E6*Math.random()|0);var Hb=0;function Ib(a,b,c,d,e){this.listener=a;this.g=null;this.src=b;this.type=c;this.capture=!!d;this.h=e;this.key=++Hb;this.m=this.s=!1}function Jb(a){a.m=!0;a.listener=null;a.g=null;a.src=null;a.h=null};function Kb(a){this.src=a;this.g={};this.h=0}Kb.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.g[f];a||(a=this.g[f]=[],this.h++);var g;a:{for(g=0;g<a.length;++g){var k=a[g];if(!k.m&&k.listener==b&&k.capture==!!d&&k.h==e)break a}g=-1}-1<g?(b=a[g],c||(b.s=!1)):(b=new Ib(b,this.src,f,!!d,e),b.s=c,a.push(b));return b};function Lb(a,b){var c=b.type;if(c in a.g){var d=a.g[c],e=qa(d,b),f;(f=0<=e)&&Array.prototype.splice.call(d,e,1);f&&(Jb(b),0==a.g[c].length&&(delete a.g[c],a.h--))}};var Mb="closure_lm_"+(1E6*Math.random()|0),Nb={},Ob=0;function Pb(a,b,c,d,e){if(d&&d.once)return Qb(a,b,c,d,e);if(Array.isArray(b)){for(var f=0;f<b.length;f++)Pb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!1,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!1,d,e)}
function Sb(a,b,c,d,e,f){if(!b)throw Error("Invalid event type");var g=ma(e)?!!e.capture:!!e,k=Tb(a);k||(a[Mb]=k=new Kb(a));c=k.add(b,c,d,g,f);if(c.g)return c;d=Ub();c.g=d;d.src=a;d.listener=c;if(a.addEventListener)Cb||(e=g),void 0===e&&(e=!1),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(Vb(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error("addEventListener and attachEvent are unavailable.");Ob++;return c}
function Ub(){var a=Wb,b=Ab?function(c){return a.call(b.src,b.listener,c)}:function(c){c=a.call(b.src,b.listener,c);if(!c)return c};return b}function Qb(a,b,c,d,e){if(Array.isArray(b)){for(var f=0;f<b.length;f++)Qb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!0,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!0,d,e)}
function Xb(a){if("number"!==typeof a&&a&&!a.m){var b=a.src;if(b&&b[Gb])Lb(b.g,a);else{var c=a.type,d=a.g;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(Vb(c),d):b.addListener&&b.removeListener&&b.removeListener(d);Ob--;(c=Tb(b))?(Lb(c,a),0==c.h&&(c.src=null,b[Mb]=null)):Jb(a)}}}function Vb(a){return a in Nb?Nb[a]:Nb[a]="on"+a}
function Yb(a,b,c,d){var e=!0;if(a=Tb(a))if(b=a.g[b.toString()])for(b=b.concat(),a=0;a<b.length;a++){var f=b[a];f&&f.capture==c&&!f.m&&(f=Zb(f,d),e=e&&!1!==f)}return e}function Zb(a,b){var c=a.listener,d=a.h||a.src;a.s&&Xb(a);return c.call(d,b)}
function Wb(a,b){if(a.m)return!0;if(!Ab){if(!b)a:{b=["window","event"];for(var c=l,d=0;d<b.length;d++)if(c=c[b[d]],null==c){b=null;break a}b=c}d=b;b=new V(d,this);c=!0;if(!(0>d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(g){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.g;e;e=e.parentNode)d.push(e);a=a.type;for(e=d.length-1;0<=e;e--){b.g=d[e];var f=Yb(d[e],a,!0,b);c=c&&f}for(e=0;e<d.length;e++)b.g=d[e],f=Yb(d[e],a,!1,b),c=c&&f}return c}return Zb(a,
new V(b,this))}function Tb(a){a=a[Mb];return a instanceof Kb?a:null}var $b="__closure_events_fn_"+(1E9*Math.random()>>>0);function Rb(a){if("function"===typeof a)return a;a[$b]||(a[$b]=function(b){return a.handleEvent(b)});return a[$b]};function W(a){U.call(this);this.l=a;this.i={}}oa(W,U);var ac=[];function bc(a){ra(a.i,function(b,c){this.i.hasOwnProperty(c)&&Xb(b)},a);a.i={}}W.prototype.j=function(){W.o.j.call(this);bc(this)};W.prototype.handleEvent=function(){throw Error("EventHandler.handleEvent not implemented");};function cc(a){U.call(this);this.i=a||document.body;this.l=new W(this);a=na(yb,this.l);this.h?a():(this.g||(this.g=[]),this.g.push(a));a=this.l;var b=this.i,c=this.u,d="click";Array.isArray(d)||(d&&(ac[0]=d.toString()),d=ac);for(var e=0;e<d.length;e++){var f=Pb(b,d[e],c||a.handleEvent,!1,a.l||a);if(!f)break;a.i[f.key]=f}}h(cc,U);
cc.prototype.u=function(a){if(!(!(zb?0==a.i.button:"click"==a.type||a.i.button&Fb[0])||Sa&&a.ctrlKey||a.defaultPrevented))for(var b=a.target;b&&b!=this.i;){if(b.tagName&&"a"==b.tagName.toLowerCase()){var c=b.getAttribute("href")||b.getAttributeNS("http://www.w3.org/1999/xlink","href"),d=c;try{var e=rb(c)[3];var f;if(f="www.google.com"===pb(e,!0)){var g=rb(c)[5];f="/url"===pb(g,!0)}if(f){var k=sb(c,"q");d=k?k:sb(c,"url")}}catch(C){a:{var t=C;if(null!=t){var n=t.A;if(null!=n){C=n;break a}}if(t instanceof
TypeError){var R=n=new kb;R.l=B(t);hb(R);n.g="__noinit__";n.g=t;n.i(new TypeError(n));t=n}else R=n=new E,R.l=B(t),hb(R),n.g="__noinit__",n.g=t,n.i(Error(n)),t=n;C=t}if(!(C instanceof ib))throw C.h;}d=null!=d?d:"";if(c!=d){e=void 0;b={target:"_blank",noreferrer:!0};c=window;d instanceof q?f=d:(f="undefined"!=typeof d.href?d.href:String(d),f instanceof q||(f="object"==typeof f&&f.h?f.g():String(f),Fa.test(f)?f=new q(f,r):(f=String(f),f=f.replace(/(%0A|%0D)/g,""),f=(g=f.match(Ea))&&Da.test(g[1])?new q(f,
r):null)),f=f||Ha);d=b.target||d.target;g=[];for(e in b)switch(e){case "width":case "height":case "top":case "left":g.push(e+"="+b[e]);break;case "target":case "noopener":case "noreferrer":break;default:g.push(e+"="+(b[e]?1:0))}e=g.join(",");if((w("iPhone")&&!w("iPod")&&!w("iPad")||w("iPad")||w("iPod"))&&c.navigator&&c.navigator.standalone&&d&&"_self"!=d)e="A",g=document,e=String(e),"application/xhtml+xml"===g.contentType&&(e=e.toLowerCase()),g=e=g.createElement(e),f=f instanceof q?f:Ga(f),g.href=
u(f),e.setAttribute("target",d),b.noreferrer&&e.setAttribute("rel","noreferrer"),b=document.createEvent("MouseEvent"),b.initMouseEvent("click",!0,!0,c,1),e.dispatchEvent(b);else if(b.noreferrer){if(c=La("",c,d,e),b=u(f),c){Pa&&-1!=b.indexOf(";")&&(b="'"+b.replace(/'/g,"%27")+"'");c.opener=null;Ba.test(b)&&(-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;")),-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;")),-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;")),-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;")),-1!=b.indexOf("'")&&
(b=b.replace(za,"&#39;")),-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;")));b='<meta name="referrer" content="no-referrer"><meta http-equiv="refresh" content="0; url='+b+'">';if(void 0===m)if(d=null,(e=l.trustedTypes)&&e.createPolicy){try{d=e.createPolicy("goog#html",{createHTML:pa,createScript:pa,createScriptURL:pa})}catch(C){l.console&&l.console.error(C.message)}m=d}else m=d;b=(d=m)?d.createHTML(b):b;b=new x(b,null,Ka);(c=c.document)&&c.write&&(c.write(b instanceof x&&b.constructor===x?b.i:"type_error:SafeHtml"),
c.close())}}else(c=La(f,c,d,e))&&b.noopener&&(c.opener=null);a.h();break}}b=b.parentNode}};function dc(a){new cc(a)}var X=["DOCS_installLinkReferrerSanitizer"],Y=l;X[0]in Y||"undefined"==typeof Y.execScript||Y.execScript("var "+X[0]);for(var Z;X.length&&(Z=X.shift());)X.length||void 0===dc?Y[Z]&&Y[Z]!==Object.prototype[Z]?Y=Y[Z]:Y=Y[Z]={}:Y[Z]=dc;}).call(this);
</script><script type="text/javascript" nonce="">DOCS_installLinkReferrerSanitizer();</script></body></html>